package leetcode.array;

public class Test209 {

    public static void main(String[] args) {
        int[] nums = {0,3,0,4,2,1};
        int i = minSubArrayLen(7, nums);
        System.out.println(i);
    }

//    给定一个含有 n 个正整数的数组和一个正整数 target 。
//
//    找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ，并返回其长度。如果不存在符合条件的子数组，返回 0 。
//
//    来源：力扣（LeetCode）
//    链接：https://leetcode-cn.com/problems/minimum-size-subarray-sum
//    著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
//    输入：target = 7, nums = [2,3,1,2,4,3]
//    输出：2
//    解释：子数组 [4,3] 是该条件下的长度最小的子数组。

    public static int minSubArrayLen(int target, int[] nums) {
        if (nums.length == 0){
            return 0;
        }
        int start = 0, end = 0;
        int sum = nums[0], length = Integer.MAX_VALUE;
        while (start < nums.length && end <nums.length) {
            if (sum>=target){
                if(end-start+1 < length){
                    length = end-start+1;
                }
                sum-=nums[start++];
            }
            else{
                end++;
                if (end==nums.length){
                    break;
                }
                sum+=nums[end];
            }
        }
        if (length == Integer.MAX_VALUE){
            return 0;
        }
        return length;
    }
}
